package hanoi.tower;

import java.util.List;
import java.util.Stack;
import java.util.Vector;

import es.deusto.ingenieria.is.search.formulation.State;


public class TorreHanoiState extends State implements Cloneable {
private List<Torre> vTorres;
private int numFichas;
private int numTorres;
private int torreObjetivo;
private int torreOrigen;


public TorreHanoiState(List vTorres, int numFichas, int numTorres,
int torreObjetivo, int torreOrigen) {
super();
this.vTorres = vTorres;
this.numFichas = numFichas;
this.numTorres = numTorres;
this.torreObjetivo = torreObjetivo;
this.torreOrigen = torreOrigen;
}

public int getNumFichas() {
return numFichas;
}

public void setNumFichas(int numFichas) {
this.numFichas = numFichas;
}

public TorreHanoiState() {
// TODO Auto-generated constructor stub
}

@Override
public String toString() {
// TODO Auto-generated method stub
return null;
}

public List getvTorres() {
return vTorres;
}

public void setvTorres(List vTorres) {
this.vTorres = vTorres;
}

public int getNumTorres() {
return numTorres;
}

public void setNumTorres(int numTorres) {
this.numTorres = numTorres;
}

public int getTorreObjetivo() {
return torreObjetivo;
}

public void setTorreObjetivo(int torreObjetivo) {
this.torreObjetivo = torreObjetivo;
}
public int getTorreOrigen() {
return torreOrigen;
}

public void setTorreOrigen(int torreOrigen) {
this.torreOrigen = torreOrigen;
}

public boolean equals(TorreHanoiState s1, TorreHanoiState s2) {
boolean esIgual = true;
Vector vt1= new Vector(s1.getvTorres());
Vector vt2 = new Vector(s2.getvTorres());
for(int i=0; i<= numTorres; i++){
Torre t1= new Torre(vt1.elementAt(i));
Torre t2= new Torre(vt2.elementAt(i));
if(!t1.equals(t2)){
esIgual = false;
}
}
// TODO Auto-generated method stub
return esIgual;
}

@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
return false;
}

public Object clone() {
	TorreHanoiState clon = null;
	
	try {
		clon = (TorreHanoiState) super.clone();
		clon.numFichas = this.getNumFichas();
		clon.numTorres = this.getNumTorres();
		clon.torreObjetivo = this.getTorreObjetivo();
		clon.torreOrigen = this.getTorreOrigen();
		clon.vTorres = this.getvTorres();
	} catch (CloneNotSupportedException e) {
		System.err.println("% [ERROR] TorreHanoitState.clone(): " + e.getMessage());
	}
	
	return clon;
}

public static void main (String [] args) {
	Ficha f1= new Ficha();
	f1.setTamano(2);
	f1.setOrden(0);
	
	Ficha f2= new Ficha();
	f2.setTamano(4);
	f2.setOrden(1);
	
	Ficha f3= new Ficha();
	f3.setTamano(6);
	f3.setOrden(2);
	
	Torre t1= new Torre();
	t1.setPosicion(0);
	t1.setNfichas(0);
	
	Torre t2= new Torre();
	t2.setPosicion(1);
	t2.setNfichas(0);
	
	Torre t3= new Torre();
	t3.setPosicion(2);
	t3.setNfichas(3);
	Stack vFichas= new Stack(); 
	Vector vTorres= new Vector<>(3);
	vFichas.addElement(f3);
	vFichas.addElement(f2);
	vFichas.addElement(f1);
	t3.torre=vFichas;
	vTorres.addElement(t1);
	vTorres.addElement(t2);
	vTorres.addElement(t3);
	
	
	TorreHanoiState s1= new TorreHanoiState(vTorres,3,3,t3.getPosicion(), 0);
	
	TorreHanoiState clon= (TorreHanoiState) s1.clone();
	
	System.out.println("PRUEBA CLON "+ clon.getNumFichas());
}
}